package cn.demoncat.util.mybatis.util;

import cn.demoncat.util.lang.ParamEmptyUtil;

/**
 * OGNL表达式
 * 
 * 用于mapper.xml中做复杂的条件判断
 * 
 * 示例： <if test="@cn.demoncat.util.mybatis.util.MapperOgnl@isNotEmpty(goodsName)"> AND goods_name = #{goodsName} </if>
 * 
 * @author yxl
 *
 */
public final class MapperOgnl {

	/**
	 * 判断是否都为空
	 * 
	 * @param os
	 */
	public static boolean allEmpty(Object ...os) {
		if (os == null || os.length == 0) {
			return true;
		}
		for (Object o : os) {
			if (isNotEmpty(o)) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 判断是否都非空
	 * 
	 * @param os
	 */
	public static boolean allNotEmpty(Object ...os) {
		if (os == null || os.length == 0) {
			return false;
		}
		for (Object o : os) {
			if (isEmpty(o)) {
				return false;
			}
		}
		return true;
	}
 
	/**
	 * 判断为空
	 * 
	 * @param o
	 */
	public static boolean isEmpty(Object o) {
		return ParamEmptyUtil.isEmpty(o);
	}

	/**
	 * 判断非空
	 * 
	 * @param o
	 */
	public static boolean isNotEmpty(Object o) {
		return ! isEmpty(o);
	}
	/**
	 * 
	 * 功能描述：判断非空（至少有一个参数非空）
	 *
	 * @param os
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年3月23日
	 */
	public static boolean anyNotEmpty(Object ...os){
		if (os == null || os.length == 0) {
			return false;
		}
		for (Object o : os) {
		    if (isNotEmpty(o)) {
		    	return true;
		    }
		}
		return false;
	}
	/**
	 * 
	 * 功能描述：判断为空（至少有一个参数为空）
	 *
	 * @param os
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年3月23日
	 */
	public static boolean anyEmpty(Object ...os){
		if (os == null || os.length == 0) {
			return true;
		}
		for (Object o : os) {
			if (isEmpty(o)) {
				return true;
			}
		}
		return false;
	}
	/**
	 * 判断两个对象中，首个非空，末个为空
	 * 
	 * @param o1
	 * @param o2
	 */
	public static boolean firstNotEmpty(Object o1, Object o2) {
		return (isNotEmpty(o1) && isEmpty(o2));
	}
	
	
}
